// 数据访问
 import roleAjax from '@/api/role.js'
 import BaseService from './BaseService.js'

var globalThis;

//私有方法

class RoleService extends BaseService{

   // 初始化，并且用来替代  vue中的  methods: {}
   init(_vueRef) {
    super.baseInit(_vueRef,roleAjax);
    globalThis = _vueRef;

    // 配置验证规则
     this.ajax_validator();

    //注册 新增按钮
    globalThis.addForm= this.addForm
    //注册 保存按钮
    globalThis.saveData=this.saveData
  }

  // 添加对话框
  addForm() {
    globalThis.dialogVisible= true;
    globalThis.title='添加数据';
    //清除样式 ，随带清除数据（行不行？）
    // dialog源码写的，如果默认是隐藏，不会显示 body里面的内容的
    //只有使用 dom或数据更新以后的 回调函数 Vue.nextTick(函数 {})
    //在 Vue-cli 脚手架中使用语法是  this.$ntxtTick(函数 {});
    //https://cn.vuejs.org/v2/api/#Vue-nextTick
    globalThis.$nextTick( function() {
       globalThis.$refs['editForm'].resetFields();
    });

  }

  //新增数据方法
  saveData(){
    // ajax新增
    roleAjax.insert(globalThis.formData).then( resp => {
      // 隐藏对话框
       globalThis.dialogVisible= false;
       // 重新查询数据
       globalThis.handleCurrentChange(1);
    })
  }

   ajax_validator(){

  		  // 验证角色名称
  		  var validatorRoleName= (rule,value,callback) => {
  		       //通过axios 访问后台

  			let paramsObj= {
  					  roleId: globalThis.formData.roleId,
  					  roleName :value
  			 }; 
  		   roleAjax.existsRoleName(paramsObj).then(resp => {
  				//成功 
  		   		if(resp.message==='success'){
  					  callback();
  				   }else{
  					   callback(new Error( resp.message));
  				  }

  		   	}).catch(e => {
  		   		callback(new Error('网络异常,请试'));
  		   	});

  		   };

  		   // 验证角色标识
  		   var validatorRoleKey= (rule,value,callback) => {
  		        //通过axios 访问后台

  		   			let paramsObj= {
  		   					  roleId: globalThis.formData.roleId,
  		   					  roleKey :value
  		   		 };

  		    	roleAjax.existsRoleKey(paramsObj).then(resp => {
  		   				//成功 
  		    		if(resp.message==='success'){
  		   					callback();
  		   				}else{
  		   					callback(new Error( resp.message));
  		   				}

  		    	}).catch(e => {
  		    		callback(new Error('网络异常,请试'));
  		    	});

  		    };

  			let myrules= {
  				roleName:[
  					{required:true, message:'该值不能为空',trigger:'blur'},
  					{min:2, max:20, message:'该值长值在2到20个字符之间',trigger:'blur'},
  					{validator: validatorRoleName,trigger:'blur'}
  				],
  				roleKey:[
  					{required:true, message:'该值不能为空',trigger:'blur'},
  					{validator: validatorRoleKey,trigger:'blur'}
  				]
  			}


  			 globalThis.rules= myrules;
  	  }


}

var roleService= new RoleService();
export default roleService
